#pragma once
#include <pthread.h>

// 使用锁需要频繁调用系统调用，十分麻烦
// 于是实现锁的RAII设计
class LockGuard
{
private:
    pthread_mutex_t *GetMutex() { return _mutex; }

public:
   
    LockGuard(pthread_mutex_t* mutex)
   	:_mutex(mutex)
    {
	    pthread_mutex_lock(_mutex);
    }
   
    ~LockGuard()
    {
	    pthread_mutex_unlock(_mutex);
    }

private:
    pthread_mutex_t *_mutex;
};

/*
 *之前的理解错误了：不需要init和destroy，因为锁本身就是存在的！
 *锁在一般情况下会内置在类的内部，需要使用（加锁）的时候，把锁的地址传进来就行了
 *在构造函数内加锁，析构函数内解锁。
 *e.g.
 while(ture)
 {
 	LockGuard lockguard(td->_mutex);
 	if(tickets > 0)
	{
		//抢票
	}
	else
	{
		break;
	}
 }
 *while内每一次进行循环，都需要创建一个新的锁，创建即加锁，if代码块结束即为解锁
 */



/*
    void UnLock() { pthread_mutex_unlock(&_mutex); }
    void Lock() { pthread_mutex_lock(&_mutex); }
*/
